/**
 * 基础工具方法封装
 * @module Base
 */
import MD5 from 'crypto-js/md5'
import { showError } from './sju.alert.js'
// 默认配置
import { t } from '@/common/sju.i18n.js'

// 开发模式开关
const DEBUG_MODE = process.env.NODE_ENV === 'development'

/**
 * 开发日志输出
 * @param {string} msg 日志信息
 * @param {*} [data] 附加数据
 */
function logInfo(msg, data) {
  if (DEBUG_MODE) {
    console.info(`[DEBUG] ${msg}`, data || '')
  }
}

/**
 * MD5加密
 * @param {string} val 要加密的字符串
 * @returns {string} MD5哈希值
 */
function toMD5(val) {
  if (typeof val !== 'string') {
    val = String(val)
  }
  return MD5(val).toString()
}

/**
 * 严格空值检查
 * @param {*} val 要检查的值
 * @returns {boolean}
 */
function isNull(val) {
  return (
    val === null ||
    val === undefined ||
    (typeof val === 'string' && val.trim() === '') ||
    (Array.isArray(val) && val.length === 0) ||
    (typeof val === 'object' && Object.keys(val).length === 0)
  )
}

/**
 * 非空检查
 * @param {*} val 要检查的值
 * @returns {boolean}
 */
function isNotNull(val) {
  return !isNull(val)
}

/**
 * 非空检查并提示
 * @param {*} val 要检查的值
 * @param {string} msg 空值提示信息
 * @returns {boolean}
 */
function checkNotNull(val, msg) {
  if (isNull(val)) {
    showError(msg || t('common.base.not_null'))
    return false
  }
  return true
}

/**
 * 批量非空检查
 * @param {Array<{val: *, msg: string}>} arr 检查项数组
 * @returns {boolean}
 */
function checkArrayNotNull(arr) {
  if (!Array.isArray(arr)) {
    showError(t('common.base.must_array'))
    return false
  }

  for (const item of arr) {
    if (!item || isNull(item.val)) {
      showError(item?.msg || '参数不能为空')
      return false
    }
  }
  return true
}

export {
  logInfo,
  toMD5,
  isNull,
  isNotNull,
  checkNotNull,
  checkArrayNotNull
}